package com.sxpi.user.controller;

import com.sxpi.common.result.R;
import com.sxpi.user.dto.LoginFaceDto;
import com.sxpi.user.dto.UserDto;
import com.sxpi.user.pojo.User;
import com.sxpi.user.service.user.IUserService;
import com.sxpi.user.dto.LoginTeDto;
import com.sxpi.user.service.weixin.TecentFaceService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

/**
 * @Author: 董伟豪
 * @Date: 2022/10/2 17:29
 */
@RestController
@Slf4j
public class UserController {

    @Autowired
    private IUserService userService;

    @Autowired
    private TecentFaceService tecentFaceService;

    /**
     * 更新手机号码更新信息
     * 如果不进行传递这里token就是空，会报错
     * 根据token在内存中获取id
     * @param loginTeVo
     * @return
     */
    @PostMapping("/user/updatetel")
    public R updateUserTel(@RequestBody LoginTeDto loginTeVo){
        /*
            feign拦截器将会拦截到header中的token来进行传递
        Object loginId = StpUtil.getLoginId();
        Object userId = StpUtil.getSession().get("userId");

        */

        boolean b = userService.updateTel(loginTeVo);
        return b ? R.ok() : R.error("修改手机失败");
    }

    /**
     * 人脸识别建档
     *
     * @return
     * @paramp loginVo
     */
    @PostMapping("/user/face/create")
    public R createUserFaceModel(@RequestBody LoginFaceDto loginFaceVo) {
        String result = tecentFaceService.createUserFaceModel(loginFaceVo.getUserId(), loginFaceVo.getPhoto());
        return result.equals("success") ? R.ok("success") : R.error(result);
    }

    /**
     * 人脸识别认证，判断是否是同一个人
     *
     * @return
     * @paramp loginVo
     */
    @PostMapping("/user/face/verify")
    public R verifyUserFaceModel(@RequestBody LoginFaceDto loginFaceVo) {
        String result = tecentFaceService.verifyUserFaceModel(loginFaceVo.getUserId(), loginFaceVo.getPhoto());
        return result.equals("success") ? R.ok("success") : R.error(result);
    }

    /**
     * 修改用户信息
     * @param userVo
     * @return
     */
    @PostMapping("/user/info/update")
    public R updateUserModel(@RequestBody UserDto userVo) {
        // 创建一个用户对象
        User user = new User();
        // 复制参数信息到用户对象中
        BeanUtils.copyProperties(userVo,user);
        // 执行更新
        boolean result = userService.updateById(user);
        // 更新返回
        return result ? R.ok("success") : R.error("fail");
    }

    /**
     * 获取用户信息
     * @return
     * @paramp loginVo
     */
    @PostMapping("/user/get/{userId}")
    public R getUserInfo(@PathVariable("userId") Long userId) {
        User user = userService.getById(userId);
        // 更新返回
        return R.ok().put("user", user);
    }
}
